#ifndef MSGDEFINE_INC_H
#define MSGDEFINE_INC_H


//定义一些回复给客户端的错误码
#define MSG_NOERROR       0 //没有错误
#define MSG_ERROR_NO_LOGIN -1 //未登录
#define MSG_ERROR_NAMEPWD -2 //用户名密码错误
#define MSG_ERROR_ALREADY_LOGIN -3 //客户已经登录
#define MSG_ERROR_ALREADY_PLAY -4 //已经请求过播放
#define MSG_ERROR_OVER_MAXLINK -5 //已经超过最大连接数
#define MSG_ERROR_NO_LOGIN -6 //客户端未登录
#define MSG_ERROR_STREAM_CONNECT -7 //请求流连接失败
#define MSG_ERROR_USERHANDLE -8 //发送的句柄错误
#define MSG_ERROR_NOFILE -9 //没有这个下载文件
#define MSG_ERROR_DOWNFILE_CONNECT -10//创建接收文件的连接失败
#define MSG_ERROR_NOREGIST_REALCALLBACK -11//主控进程没有注册播放回调函数
#define MSG_ERROR_NOREGIST_FINDRECORDCALLBACK -12//主控进程没有注册查找回调函数
#define MSG_ERROR_NOREGIST_CLOSEFIND -13//主控进程没有注册关闭查找的回调函数
#define MSG_ERROR_RECVERROR_FINDHANDLE -14//收到的错误查找句柄
#define MSG_ERROR_CLOSEFIND -15 //关闭查找录像文件失败
#define MSG_ERROR_USERHANDLE -16 //收到错误的用户句柄
#define MSG_ERROR_NOREGIST_GETCFGCALLBACk -17//主控进程没有注册获取参数的回调函数
#define MSG_ERROR_NOREGIST_SETCFGCALLBACk -18//主控进程没有注册设置参数的回调函数
#define MSG_ERROR_NOREGIST_FINDRECORDPATY -19//主控进程没有注册获取录像路径的回调函数
#define MSG_ERROR_DOWNHANDLE -20//收到错误的下载句柄
#define MSG_ERROR_ALREADY_DOWNFILE -21 //正在下载录像文件

#define MSG_FILE_SUCCESS 1000 //获取文件信息成功
#define MSG_FILE_NOFIND 1001  //未查找到文件
#define MSG_FILE_ISFINDING 1002 //正在查找请等待
#define MSG_FILE_NOMOREFILE 1003 //没有更多文件，查找结束
#define MSG_FILE_EXCEPTION 1004  //查找文件异常

#define USER_CFG_FILE   "/home/prog/etc/user.cfg" //部署的时候，需要建立这个文件
#define RECORD_PATH_CFG "/home/prog/etc/RecordPath.cfg"//记录存放录像的路径

#define USERNAME_LEN 32
#define USERPWD_LEN 16

#define FILENAME_LEN 20 //查找录像时，缓存查找结果的缓冲区长度

#define RECORD_PATH_LEN 100 //录像存放路径长度

#define MAX_FRAME_SIZE 40*1024//3*720*576

#define USER_NAME_LEN 32 //用户名长度
#define USER_PWD_LEN 16 //用户密码长度

//向客户端回复的命令类型
#define MSG_CLIENT_LOGIN_RE 100 //服务器返回用户句柄
#define MSG_CLIENT_FIND_RECORD_RE 105 //返回查找录像句柄的消息
#define MSG_CLIENT_DOWNFILE_RE 106 //返回下载录像是否成功
#define MSG_RECORD_SERVER_FILEINFO 200 //CMA发送文件的基本类型
#define MSG_RECORD_SERVER_STOPUPDATERECORD 201 //CMA发送停止上传录像的消息
#define MSG_RECORD_SERVER_CONNECTSTATE 202 //向CMA回复侦听次数是否到达上限
//视频服务器回复的消息类型
#define MSG_RECORD_SERVER_STOPUPDATERECORD_RE 300

#define MSG_CLIENT_LOGIN 1 //客户端登录消息
#define MSG_CLIENT_FIND_RECORD 5//客户端查找录像的消息
#define MSG_CLIENT_FINDNEXT_RECORD 6//逐个获取查找到的文件信息
#define MSG_CLIENT_DOWNFILE_BYNAME 7 //通过文件名下载录像文件

#define DOWN_HANDLE_BASE 3000 //下载录像句柄 = 用户句柄 + DOWN_HANDLE_BASE

#define FIND_RECORD_LEN 20 //查找录像时，缓存查找结果的缓冲区长度

#define FIFO_HEAD 0xfe5a5cff //缓冲队列头

//消息头
typedef struct
{
	unsigned int iCmdType;//命令类型
	unsigned int iMsgSize;//命令长度
}MSG_HEAD,*PMSG_HEAD;
//向CMA回复操作结果
typedef struct
{
	MSG_HEAD msgHead;
	int iRet;//1:操作成功   0：操作失败
}MSG_RESULT,*PMSG_RESULT;

//客户端请求登录的消息
typedef struct
{
	MSG_HEAD msgHead;
	char cUserName[USERNAME_LEN]; //用户名
	char cUserPwd[USERPWD_LEN];//用户密码
}MSG_LOGIN,*PMSG_LOGIN;


typedef struct
{
   MSG_HEAD msgHead;
   char cFileName[FILENAME_LEN];
   int iFileSize;
}MSG_FILEINFO,*PMSG_FILEINFO;
typedef struct
{
   MSG_HEAD msgHead;
   int iFinish;//标示文件上传是否完成（1-完成；0-未完成）
   double pos;//标示文件上传到了第几个字节
}MSG_FILE_POS,*PMSG_FILE_POS;

typedef struct
{
   long lHead;
   long lRealDataSize;
}MSG_REALPLAY_HEAD,*PMSG_REALPLAY_HEAD;

typedef struct
{
	int iEnd;//0-文件还有数据；1-文件已经读完
	int iSize;
}MSG_DOWNFILE_HEAD,*PMSG_DOWNFILE_HEAD;

typedef struct
{
	MSG_REALPLAY_HEAD msgHead;
	MSG_DOWNFILE_HEAD msgDownHead;
	char cBuf[MAX_FRAME_SIZE];
}MSG_DOWNFILEDATA,*PMSG_DOWNFILEDATA;

//录像查找消息结构体
typedef struct
{
	MSG_HEAD msgHead;
	long lUserID;
	long lChannelID;
	long lFileType;
	long lStartTime;
	long lStopTime;
}MSG_FIND_RECORD,*PMSG_FIND_RECORD;

//查找下一条录像结构体
typedef struct
{
	MSG_HEAD msgHead;
	long lFindHandle;
}MSG_FINDNEXT_RECORD,*PMSG_FINDNEXT_RECORD;

//录像查找结果
typedef struct
{
	MSG_HEAD msgHead;
	char  sFileName[FIND_RECORD_LEN]; //文件名
	long  lStartTime;//开始时间
	long  lStopTime;//结束时间
	long  lFileSize;//文件大小
	int   iRet;//1000-获取文件信息成功；1001-未查找到文件；1002-正在查找请等待；1003-没有更多文件，查找结束；1004-查找文件异常
}MSG_FIND_RECORD_RE,*PMSG_FIND_RECORD_RE;

//通过文件名下载录像
typedef struct
{
    MSG_HEAD msgHead;
    long lUserID;
    char cFileName[FILENAME_LEN];
}MSG_DOWNFILE_BYNAME,*PMSG_DOWNFILE_BYNAME;
//停止上传录像结构体
typedef struct
{
   MSG_HEAD msgHead;
   char cFileName[FILENAME_LEN];
}MSG_STOPUPDATE,*PMSG_STOPUPDATE;
#endif
